﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string.h>
using namespace std;
//class Person
//{//protected:
//	string _name = "小李子";
//	int _num = 111;
//
//};
//class Student : public Person
//{
//public:
//	void Print()
//	{
//		cout << "姓名:"<<_name<< endl;
//			/*cout << " ⾝份证号: "<<Person::_num<< endl;*/
//			cout << " 学号: "<<_num<<endl;
//	}
//protected:
//	int _num = 999; // 同名隐藏
//	
//
//};
//int main()
//{
//	Student s1;
//	s1.Print();
//	return 0;
//};
//
//class Person
//{
//public:
//    Person(const char* name = "peter")
//        : _name(name)
//    {
//        cout << "Person()" << endl;
//    }
//
//    Person(const Person& p)//拷贝构造
//        : _name(p._name)
//    {
//        cout << "Person(const Person& p)" << endl;
//    }
//
//    Person& operator=(const Person& p)
//    {
//        cout << "Person operator=(const Person& p)" << endl;
//        if (this != &p)
//            _name = p._name;
//        return *this;
//    }
//    ~Person()
//    {
//        cout << "~Person()" << endl;
//    }
//protected:
//    string _name; // 姓名
//
//};
//class Student : public Person
//{
//public:
//    Student(const char* name, int num)//初始化构造时需要单独构造父关系
//        : Person(name)
//        , _num(num)
//    {
//        cout << "Student()" << endl;
//    }
//
//    Student(const Student& s)//拷贝构造时也需要构造父关系
//        : Person(s)//直接传s，因为会切片
//        , _num(s._num)
//    {
//        cout << "Student(const Student& s)" << endl;
//    }
//
//    Student& operator = (const Student& s)
//    {
//        cout << "Student& operator= (const Student& s)" << endl;
//        if (this != &s)
//        {
//            // 构成隐藏，所以需要显⽰调⽤
//
//                Person::operator =(s);
//            _num = s._num;
//        }
//        return *this;
//    }
//
//    ~Student()//析构时不需要析构父关系，系统自动调用。一是为了满足栈关系。二是因为子关系可能再用父关系，而父关系不会再用子关系。
//    {
//        cout << "~Student()" << endl;
//    }
//protected:
//    int _num; ///学号
//    
//
//};
//int main()
//{
//    Student s1("jack", 18);
//    Student s2(s1);//拷贝构造
//    Student s3("rose", 17);
//    s1 = s3;//赋值
//
//    return 0;
//}
